package ve.org.src.util
class DirectivasUtils {
    static const_numeros="NUMEROS"
    static const_let_min="LET_MIN"
    static const_let_may="LET_MAY"
    static const_secuencia="SECUENCIA"
    static const_car_esp="CAR_ESP"
    static const_max_len="MAX_LEN"
    static const_min_len="MIN_LEN"
    static const_car_rep="CAR_REP"
    static clave_default="clave_default"


    static validarDirectivas(directivas,password){
        def msg=[]
        directivas.each{dir->
//            println dir
            def resp=validarDirectiva(dir,password)
            msg.add([code:dir.nombre,value:dir.valor,sts:resp,des:dir.descripcion])
            
        }
        return msg
    }
    // Devuelve 1 si cumple con la directiva
    static validarDirectiva(dir,password){
        int resp=1
        try{
            if(const_numeros==dir.nombre.toUpperCase()){
                return validarNumeros(password)
            }
            if(const_let_min==dir.nombre.toUpperCase()){
                return validarLetMin(password)
            }
            if(const_let_may==dir.nombre.toUpperCase()){
                return validarLetMay(password)
            }
            if(const_secuencia==dir.nombre.toUpperCase()){
                return validarSecuencia(password)
            }
            if(const_car_esp==dir.nombre.toUpperCase()){
                return validarCarEsp(password,dir.valor)
            }
            if(const_max_len==dir.nombre.toUpperCase()){
                if(password.length()<=new Integer(dir.valor))return 1
            }
            if(const_min_len==dir.nombre.toUpperCase()){
                if(password.length()>=new Integer(dir.valor)) return 1
            }
            if(const_car_rep==dir.nombre.toUpperCase()){
                return validarCarRep(password)
            }

        }catch(Exception e){
            println e
        }

        return resp
    }

    static validarNumeros(String password){
        return validarRangos(password,'0','9')
    }

    static validarLetMin(String s){
        return validarRangos(s,'a','z')
    }

    static validarLetMay(String s){
        return validarRangos(s,'A','Z')
    }

    static validarRangos(String s,a,b){
        def arr=s.toCharArray()
        char A=(char)a
        char B=(char)b
        int resp=0
        arr.each{letra->
            if(letra>=A&&letra<=B)resp=1
        }
        return resp
    }
    static validarSecuencia(String s){
        def ant
        def i=0
        int resp=1
        s.each{actual->
            if(i>0){
          
                def pivot=(int)actual
                def b=(int)ant
                if(ant==pivot+1)resp=0
                if(ant==pivot-1)resp=0
            }
            ant=actual
            i++
        }
        return resp
    }
    static validarCarEsp(String s,String value){
        int resp=0
        s.each{cara->
            value.each{carb->
                if(cara==carb)resp=1
            }
        }
        return resp
    }
    static validarCarRep(String s){
        def ant=null
        int resp=1
        s.each{actual->
            if(ant==actual)resp=0
            ant=actual
        }
        return resp
    }
}

